package seqlist;
// 带头单链表
public class SingleLinkedListWithHead {
    // 当前存储的元素个数
    private int size;
    // 虚拟头节点
    private Node dummyHead = new Node(-1);

    // 添加方法
    public void addIndex(int index,int val) {
        // 判断index的合法性
        if (index < 0 || index > size) {
            System.err.println("add index illegal!");
            return;
        }
        // 插入全都是中间节点
        Node node = new Node(val);
        // 找到待插入位置的前驱
        Node prev = dummyHead;
        for (int i = 0; i < index; i++) {
            prev = prev.next;
        }
        // prev指向待插入位置的前驱
        node.next = prev.next;
        prev.next = node;
        size ++;
    }

    public void addFirst(int val) {
        addIndex(0,val);
    }

    public void addLast(int val) {
        addIndex(size,val);
    }

    public String toString() {
        String ret = "";
        Node node = dummyHead.next;
        while (node != null) {
            ret += node.val;
            ret += "->";
            node = node.next;
        }
        ret += "NULL";
        return ret;
    }

    public void removeIndex(int index) {
        if (index < 0 || index >= size) {
            System.err.println("remove index illegal!");
            return;
        }
        // 删除中间节点
        Node prev = dummyHead;
        // 找到待删除位置的前驱
        for (int i = 0; i < index; i++) {
            prev = prev.next;
        }
        // prev指向待删除位置的前驱
        prev.next = prev.next.next;
        size --;
    }

}
